CREATE PROCEDURE amsp_CMCopyNavMenu
@InOriginalNavMenuID numeric,
@InContactID numeric,
@OutNewNavMenuID numeric OUTPUT
AS
BEGIN
DECLARE
@Title varchar(255),
@SectionName varchar(255),
@NewNavMenuID numeric,
@ContentID numeric,
@NavMenuID numeric,
@Error integer,
@BelowSortOrder numeric(28,18),
@LowestSortOrder numeric(28,18),
@SortIncrement numeric(28,18),
@SortOrder numeric(28,18),
@CategoryDepth integer,
@AncestorNavMenuID numeric,
@ParentNavMenuID numeric,
@RowNum integer
CREATE TABLE #NavMenu
(NavMenuID numeric,
SortOrder numeric(28,18),
NewNavMenuID numeric)
INSERT INTO #NavMenu
SELECT NavMenuID, SortOrder, NULL
FROM Nav_Menu WITH (NOLOCK)
WHERE NavMenuID = @InOriginalNavMenuID
WHILE @@RowCount > 0 BEGIN
INSERT INTO #NavMenu
SELECT NavMenuID, SortOrder, NULL
FROM Nav_Menu WITH (NOLOCK)
WHERE ParentNavMenuID IN (SELECT NavMenuID
FROM #NavMenu)
AND NavMenuID NOT IN (SELECT NavMenuID
FROM #NavMenu)
END
DECLARE c_NavMenuToCopy CURSOR FOR
SELECT a.NavMenuID,
b.Title,
b.CategoryDepth,
b.AncestorNavMenuID,
b.ParentNavMenuID
FROM #NavMenu a, Nav_Menu b WITH (NOLOCK)
WHERE a.NavMenuID = b.NavMenuID
ORDER BY b.SortOrder
SELECT @LowestSortOrder = Max(SortOrder)
FROM #NavMenu
SELECT @BelowSortOrder = Min(SortOrder)
FROM Nav_Menu WITH (NOLOCK)
WHERE SortOrder > @LowestSortOrder
AND NavContentGroupInd = (SELECT NavContentGroupInd FROM Nav_Menu WHERE NavMenuID = @InOriginalNavMenuID)
SELECT @RowNum = COUNT(*)
FROM #NavMenu
IF @BelowSortOrder IS NULL
SET @BelowSortOrder = @LowestSortOrder + @RowNum
SET @SortIncrement = (@BelowSortOrder - @LowestSortOrder) / (@RowNum + 1)
SET @SortOrder = @LowestSortOrder
OPEN c_NavMenuToCopy
FETCH NEXT FROM c_NavMenuToCopy
INTO @NavMenuID,
@Title,
@CategoryDepth,
@AncestorNavMenuID,
@ParentNavMenuID
WHILE @@FETCH_STATUS = 0 BEGIN
IF @NewNavMenuID IS NULL
SET @Title = 'Copy of ' + @Title
SET @Title = Left(@Title,255)
EXEC amsp_CMGetUniqueSectionName NULL, @Title, @SectionName OUTPUT
SET @SortOrder = @SortOrder + @SortIncrement
IF @ParentNavMenuID IS NOT NULL
SELECT @ParentNavMenuID = NewNavMenuID
FROM #NavMenu
WHERE NavMenuID = @ParentNavMenuID
IF @AncestorNavMenuID IS NOT NULL
SELECT @AncestorNavMenuID = NewNavMenuID
FROM #NavMenu
WHERE NavMenuID = @AncestorNavMenuID
INSERT INTO Nav_Menu
(WorkflowStatusCode,
HideFlag,
NavContentGroupInd,
Name,
Title,
ParentNavMenuID,
AncestorNavMenuID,
CategoryDepth,
SortOrder,
DirectListComboInd,
ContentAuthorityGroupID,
AuthoritySetManuallyFlag,
OwnerContactID,
OwnerSetManuallyFlag,
ExpirationDays,
LastUpdatedByContactID,
WebsiteKey,
ShowInTopFlag,
ShowInSideFlag,
MicrositeFlag)
SELECT 'W',
HideFlag,
NavContentGroupInd,
@SectionName,
@Title,
@ParentNavMenuID,
@AncestorNavMenuID,
CategoryDepth,
@SortOrder,
DirectListComboInd,
ContentAuthorityGroupID,
AuthoritySetManuallyFlag,
OwnerContactID,
OwnerSetManuallyFlag,
ExpirationDays,
@InContactID,
WebsiteKey,
ShowInTopFlag,
ShowInSideFlag,
MicrositeFlag
FROM Nav_Menu WITH (NOLOCK)
WHERE NavMenuID = @NavMenuID
SELECT @Error = @@Error
IF @Error <> 0 BEGIN
RETURN
END
SET @NewNavMenuID = @@Identity
UPDATE #NavMenu
SET NewNavMenuID = @NewNavMenuID
WHERE NavMenuID = @NavMenuID
IF @OutNewNavMenuID IS NULL
SET @OutNewNavMenuID = @NewNavMenuID
IF @AncestorNavMenuID IS NULL
UPDATE Nav_Menu
SET AncestorNavMenuID = @NewNavMenuID
WHERE NavMenuID = @NewNavMenuID
INSERT INTO Nav_Menu_Workflow_Log
(NavMenuID,
WorkflowStatusCode,
ContactID,
ChangeDateTime)
VALUES (@NewNavMenuID,
'W',
@InContactID,
CURRENT_TIMESTAMP)
INSERT INTO Nav_Menu_Feature
(NavMenuID,
BreadCrumb)
SELECT @NewNavMenuID,
@Title
FROM Nav_Menu_Feature
WHERE NavMenuID = @InOriginalNavMenuID
EXEC amsp_CMUpdateNavProperties @NewNavMenuID
FETCH NEXT FROM c_NavMenuToCopy
INTO @NavMenuID,
@Title,
@CategoryDepth,
@AncestorNavMenuID,
@ParentNavMenuID
END
CLOSE c_NavMenuToCopy
DEALLOCATE c_NavMenuToCopy
END
GO
GRANT EXECUTE ON [dbo].[amsp_CMCopyNavMenu] TO [IMIS]
GO